function debounce(fn, delay) {
  let timer = null;
  return function() {
    // 取debounce作用域中的this
    let context = this;
    let args = arguments;
    // 如果此时存在定时器的话，则取消之前的定时器计时,重新计时
    // 这就是防抖的主要程序
    if (timer) {
      clearTimeout(timer);
      timer = null;
    }
    // 设置定时器，间隔delay后执行回调函数
    timer = setTimeout(function() {
      fn.apply(context, args);
    }, delay);
  };
}

// 测试
function testDebounce(e, content) {
  console.log(e,content);
}

let testDebounceFn = debounce(testDebounce, 1000);
document.onmousemove = function(e) {
  testDebounceFn(e, 'debounce');
}